//
//  CZUserAccountViewModel.swift
//  Weibo30
//
//  Created by apple on 16/8/10.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

//  封装OAuth相关网络请求接口,对应的控制器 CZOAuthViewController
class CZUserAccountViewModel: NSObject {
    static let sharedUserAccount: CZUserAccountViewModel = CZUserAccountViewModel()
    
    //  用户账号模型
    var userAccount: CZUserAccount? {
        return CZUserAccount.loadUserAccount()
    }

    //  判断是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    //  封装accesstoken,判断逻辑
    var accessToken: String? {
        //  判断accesstoken是否为nil
        
        guard let token = userAccount?.access_token else {
            return nil
        }
        
        //  如果accesstoken不为nil,判断accesstoken的时间是否过期
        let result =  userAccount?.expiresDate?.compare(NSDate())
        //  如果是降序表示accesstoken没有过期
        if result == NSComparisonResult.OrderedDescending {
            return token
        } else {
            return nil
        }
        
        
        
    }
    
    
    //  通过code获取accesstoken
    func reqeustAccessTokenWithCode(code: String, callBack: (isSuccess: Bool)->()) {
        
        CZNetworkTools.sharedTools.reqeustAccessTokenWithCode(code) { (response, error) -> () in
            if error != nil {
                print("网络请求失败\(error)")
                callBack(isSuccess: false)
                return
            }
            
            //  代码执行到此网络请求成功
            
            //  判断服务端给的数据是否是一个正确的字典
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                callBack(isSuccess: false)
                return
            }
            //  代码执行到此,字典没有问题
            let userAccount = CZUserAccount(dic: dic)
            print(userAccount.access_token)
            //  请求用户基本信息
            self.requestUserInfo(userAccount, callBack: callBack)

            
            
            
            
        }
    }
    
    //  通过accesstoken和uid获取用户信息
    private func requestUserInfo(userAccount: CZUserAccount, callBack: (isSuccess: Bool)->()) {
        
        CZNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) -> () in
            
            if error != nil {
                print("网络请求失败, \(error)")
                callBack(isSuccess: false)
                return
            }
            
            //  代码执行到此,表示网络请求成功
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                callBack(isSuccess: false)
                return
            }
            
            //  代码执行到此,表示字典没有问题
            let name = dic["name"]
            let avatar_large = dic["avatar_large"]
            
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            print(userAccount)
            
            //  表示用户登录成功
            //  保存用户账号的模型
            userAccount.saveUserAccount()
            // 执行成功回调的闭包
            callBack(isSuccess: true)
            
            
        }
    }
    

    
    
    
    
}
